home *** CD-ROM | disk | FTP | other *** search
/ Directorty Opus 5 - Magellan 2 / Opus 5 - Magellan 2.iso / Extras / Install_3.3 / ARexx / Install_Scan.dopus5 < prev    next >
Text File  |  1997-05-09  |  4KB  |  160 lines

  1. /* $VER: Install_Scan.dopus5 3.1 (09.05.97) © Frédéric Steinfels
  2. */
  3.  
  4. Init:
  5. signal on BREAK_C
  6. signal on BREAK_D
  7. signal on BREAK_E
  8. signal on BREAK_F
  9. signal on HALT
  10. signal on IOERR
  11. signal on SYNTAX
  12. signal on FAILURE
  13. options failat 21
  14. options results
  15. parse arg arguments
  16. ProgramName = "Install_Scan.dopus5";
  17. ArgsTemplate = "PORT/A,MNPORT/A,MYPORT/A,MYID/A,HANDLE/A,LPATH/A"
  18. lf='0a'x
  19. if strip(arguments) = '?' then do
  20.     Call WriteCh(STDOUT, ArgsTemplate || ': ')
  21. pull arguments
  22. end; else nop
  23. if ~ReadArgs(arguments,ArgsTemplate) then do
  24.     say Fault(RC,ProgramName)
  25.      exit 10
  26. end; else nop
  27. drop arguments
  28. catalog=opencatalog('Install.dopus5.catalog','english',0)
  29.  
  30. address value PORT
  31.  
  32. MYPORTH=openport(MYPORT)
  33.  
  34. nump=1
  35.  
  36. lister query handle numselentries
  37. cnt=result
  38. do while cnt>0    
  39.     lister query handle firstsel
  40.     dat=result
  41.     lister select handle dat 0
  42.     lister query handle entry dat stem file
  43.     if file.date<0 then do
  44.         dopus request '"DirectoryOpus sent an invalid date for' || lf || file.name || ':' file.date
  45.         file.date=0 /* This happens sometimes, most likely if date < 1987 */
  46.     end
  47.     if file.type<0 then do
  48.         file.comment=TRANSLATE(file.comment,' ','a0'x)
  49.         dopus send MNPORT MYID || 2 || file.name || lf || nump || lf || file.size || lf || file.date || lf || file.comment
  50.     end
  51.     if file.type>0 then do
  52.         dopus send MNPORT MYID || 1 || file.name || lf || nump
  53.     end
  54.     cnt=cnt-1
  55. end
  56.  
  57. dopus send MNPORT MYID || 3 || nump
  58.  
  59. do until CMD='0'
  60.     call waitpkt(MYPORT)
  61.     Packet=getpkt(MYPORT)
  62.     if Packet ~= null() then do
  63.         ln = getarg(Packet,0)
  64.         ID=substr(ln,1,1)
  65.         CMD=substr(ln,2,1)
  66.         ARG=substr(ln,3)
  67.         call CheckArg
  68.         IF ID=0 THEN DO
  69.             IF CMD=1 THEN DO
  70.                 parse var arg path '0a'x nump
  71.                 lister read handle '"' || makepath(lpath,path) || '"' force
  72.                 lister wait handle quick
  73.                 lister query handle numentries
  74.                 cnt=result-1
  75.                 do while cnt>=0
  76.                     lister query handle entry # || cnt stem file
  77.                     if file.type<0 then do
  78.                         file.comment=TRANSLATE(file.comment,' ','a0'x)
  79.                         dopus send MNPORT MYID || 2 || file.name || lf || nump || lf || file.size || lf || file.date || lf || file.comment
  80.                     end
  81.                     if file.type>0 then do
  82.                         dopus send MNPORT MYID || 1 || file.name || lf || nump
  83.                     end
  84.                     cnt=cnt-1
  85.                 end
  86.                 dopus send MNPORT MYID || 3 || nump
  87.             end
  88.             IF CMD=2 THEN DO
  89.                 Call CleanUP
  90.                 exit
  91.             end
  92.         end
  93.     end
  94. end    
  95.  
  96. exit
  97.  
  98.  
  99.  
  100. CheckArg:
  101. IF DATATYPE(ID)~='NUM' | DATATYPE(CMD)~='NUM' THEN Call CheckArgFail
  102. IF ID~=0 THEN Call CheckArgFail
  103. IF CMD>2 THEN Call CheckArgFail
  104. RETURN
  105.  
  106.  
  107. CheckArgFail:
  108. address value PORT
  109. dopus request '"' || GetCatStr(18,'Error in') ProgramName || lf || GetCatStr(61,'Port') MYPORT || lf || GetCatStr(52,'Invalid packet received') || lf || 'ID=' || ID || lf || 'CMD=' || CMD || lf || 'ARG=' || ARG || '"' GetCatStr(0,'Abort')
  110. Call BREAK
  111. exit
  112.  
  113.  
  114.  
  115. ERROR:
  116. HALT:
  117. IOERR:
  118. SYNTAX:
  119. IF RC ~= 0 THEN DO
  120.  dopus request cnt
  121.  dopus request result
  122.  line=sigl
  123.  text=errortext(rc)
  124.  dopus request '"' || GetCatStr(18,'Error in') ProgramName || lf || GetCatStr(61,'Port') MYPORT || lf || text || lf || GetCatStr(19,'Line') line || '"' GetCatStr(0,'Abort')
  125. END
  126. else do
  127.  dopus request '"' || GetCatStr(18,'Error in') ProgramName || lf || GetCatStr(61,'Port') MYPORT || '"' GetCatStr(0,'Abort')
  128. end
  129. BREAK_C:
  130. BREAK_D:
  131. BREAK_E:
  132. BREAK_F:
  133. BREAK:
  134. dopus send MNPORT MYID || 0
  135. Call CleanUP
  136. exit
  137.  
  138.  
  139.  
  140. CleanUp:
  141. if POS(MYPORT,SHOW('p'))~=0 then do
  142.     Call FORBID()
  143.     Call ClosePort(MYPORTH)
  144.     Call PERMIT()
  145. end
  146. Call CloseCatalog(catalog)
  147. return
  148.  
  149.  
  150.  
  151. getcatstr: /* Thank you for this procedure, Edmund */
  152. parse arg msgno,msgstring
  153. if catalog~=0 then
  154.    msgstring=getcatalogstr(catalog,msgno,msgstring)
  155. do i=3 to arg()
  156.    parse var msgstring fore '%s' aft
  157.    msgstring=fore||arg(i)||aft
  158.    end
  159. return msgstring
  160.